package main

import "fmt"

// 定义 Speaker 接口
type Speaker interface {
    Speak() string // 无参数有返回值
}

// 定义 Cat 结构体
type Cat struct {
    Name string
}

// 为 Cat 结构体实现一个带参数无返回值的方法
func (c *Cat) SetName(name string) {
    c.Name = name
}

// 为 Cat 结构体实现 Speak 方法，满足 Speaker 接口
func (c Cat) Speak() string {
    // 这里我们简单地返回猫的名字加上一个声音，但实际上这个方法没有使用到Cat的任何字段
    // 只是为了演示如何定义和实现接口方法
    return c.Name + " says: Meow"
}

func main() {
    // 创建一个 Cat 实例
    cat := Cat{}
    
    // 使用带参数无返回值的方法设置猫的名字
    cat.SetName("Whiskers")
    
    // 调用无参数有返回值的方法（也是接口方法）
    sound := cat.Speak()
    fmt.Println(sound) // 输出: Whiskers says: Meow
    
    // 另一种方式：先设置名字，然后直接打印结果
    anotherCat := Cat{Name: "Mitty"} // 直接在初始化时设置名字
    fmt.Println(anotherCat.Speak())  // 输出: Mitty says: Meow
}
